#ifndef _ROM_H_
#define _ROM_H_

#include "oc_rsrc_cfg.h"

/* spiflash 芯片相关特性 */
typedef struct ROM_ATTR_STR
{
    uint32_t chip_id;            /* 芯片ID */
    char     chip_name[16];      /* 芯片型号字符串，主要用于显示 */
    uint32_t total_size;         /* 总容量 */
    uint32_t bank_size;          /* 块大小 */
    uint16_t sector_size;        /* 扇区大小 */
    uint16_t page_size;          /* 页大小 */
} rom_attr, *rom_attr_t;

/* spiflash 硬件操作 for mboot */
typedef struct rom_op_for_mboot_str
{
    hw_addr_attr * (*take_free_space)(uint32_t size);        /* 分配一片空间 */
    HW_STATUS (*erase_space)(uint32_t addr);                 /* 擦除这片空间 */
    int (*put_data)(hw_buf_attr * buf_attr, uint32_t addr);  /* 写数据 */
    hw_buf_attr * (*get_data)(uint32_t addr, uint16_t nbr);  /* 读数据 */
    void (*memory_mapped)(void);                             /* 内存映射 */
} rom_op_for_mboot;

/* spi 初始化 */
int rom_init(void);

/* 注册操作函数接口 */
rom_op_for_mboot *rom_op_for_mboot_register(void);

#endif
